fix(index): declare FM index row address results - #8855
fix(index): declare FM index row address results#8855lance-gatefixer[bot] wants to merge 2 commits into
Conversation
There was a problem hiding this comment.
✅ Gate recommendation: approve.
The earlier maintenance gap is fixed. FM results now consistently use the physical-address domain at query execution and manifest maintenance, with stable-row-ID regressions covering multi-fragment scans, rewrites, and compaction.
|
Blocked: the current-head Rust linux-build check is blocked by runner io_uring resource exhaustion. Head 4a45808 contains the current main tip. Job 98966698899 failed only lance-io::uring::tests::test_read_small_file because both io_uring workers returned ENOMEM; 7,472 tests passed before cancellation, and the repair does not modify lance-io. A failed-job rerun was attempted, but this App lacks Actions rerun access. Someone with Actions permission should rerun linux-build; alternatively, if main advances, merge the new base tip to supersede this check. |
Summary
Root cause
FM indices are trained over the _rowaddr column and return physical row addresses. FMIndexScalarIndex inherited the ScalarIndex default that declares results to be logical row IDs, so stable-row-ID datasets skipped address-to-row-ID translation and dropped matches outside fragment 0. The same incorrect declaration also selected the wrong index-maintenance domain.
Fix
Override results_are_row_addresses() for FMIndexScalarIndex. This routes FM matches through the existing dataset-layer address translation and makes index maintenance treat FM coverage in the physical-address domain.
Validation
Fixes #8848